home *** CD-ROM | disk | FTP | other *** search
- /* Author: G. Jungman
- */
- #ifndef __GSL_QRNG_H__
- #define __GSL_QRNG_H__
-
- #include <stdlib.h>
- #include <gsl/gsl_errno.h>
-
- #undef __BEGIN_DECLS
- #undef __END_DECLS
- #ifdef __cplusplus
- # define __BEGIN_DECLS extern "C" {
- # define __END_DECLS }
- #else
- # define __BEGIN_DECLS /* empty */
- # define __END_DECLS /* empty */
- #endif
-
- __BEGIN_DECLS
-
-
- /* Once again, more inane C-style OOP... kill me now. */
-
- /* Structure describing a type of generator.
- */
- typedef struct
- {
- const char * name;
- unsigned int max_dimension;
- size_t (*state_size) (unsigned int dimension);
- int (*init_state) (void * state, unsigned int dimension);
- int (*get) (void * state, unsigned int dimension, double x[]);
- }
- gsl_qrng_type;
-
- /* Structure describing a generator instance of a
- * specified type, with generator-specific state info
- * and dimension-specific info.
- */
- typedef struct
- {
- const gsl_qrng_type * type;
- unsigned int dimension;
- size_t state_size;
- void * state;
- }
- gsl_qrng;
-
-
- /* Supported generator types.
- */
- #ifdef GSL_EXPORTS
- __declspec(dllexport) const gsl_qrng_type * gsl_qrng_niederreiter_2;
- #elif defined(GSL_IMPORTS)
- __declspec(dllimport) const gsl_qrng_type * gsl_qrng_niederreiter_2;
- #else
- extern const gsl_qrng_type * gsl_qrng_niederreiter_2;
- #endif
- #ifdef GSL_EXPORTS
- __declspec(dllexport) const gsl_qrng_type * gsl_qrng_sobol;
- #elif defined(GSL_IMPORTS)
- __declspec(dllimport) const gsl_qrng_type * gsl_qrng_sobol;
- #else
- extern const gsl_qrng_type * gsl_qrng_sobol;
- #endif
-
-
- /* Allocate and initialize a generator
- * of the specified type, in the given
- * space dimension.
- */
- gsl_qrng * gsl_qrng_alloc (const gsl_qrng_type * T, unsigned int dimension);
-
-
- /* Copy a generator. */
- int gsl_qrng_memcpy (gsl_qrng * dest, const gsl_qrng * src);
-
-
- /* Clone a generator. */
- gsl_qrng * gsl_qrng_clone (const gsl_qrng * r);
-
-
- /* Free a generator. */
- void gsl_qrng_free (gsl_qrng * r);
-
-
- /* Intialize a generator. */
- void gsl_qrng_init (const gsl_qrng * r);
-
-
- /* Get the standardized name of the generator. */
- const char * gsl_qrng_name (const gsl_qrng * r);
-
-
- /* ISN'T THIS CONFUSING FOR PEOPLE?
- WHAT IF SOMEBODY TRIES TO COPY WITH THIS ???
- */
- size_t gsl_qrng_size (const gsl_qrng * r);
-
-
- void * gsl_qrng_state (const gsl_qrng * r);
-
-
- /* Retrieve next vector in sequence. */
- int gsl_qrng_get (const gsl_qrng * r, double x[]);
-
-
- #ifdef HAVE_INLINE
- extern inline int gsl_qrng_get (const gsl_qrng * r, double x[]);
- extern inline int gsl_qrng_get (const gsl_qrng * r, double x[])
- {
- return (r->type->get) (r->state, r->dimension, x);
- }
-
- #endif /* HAVE_INLINE */
-
-
- __END_DECLS
-
-
- #endif /* !__GSL_QRNG_H__ */
-